home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
fish
/
001-100
/
001-025
/
024
/
conquest
/
conqpl.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-17
|
17KB
|
428 lines
#include <stdio.h>
#include "defs.h"
#include "structs.h"
#include "vars.h"
bl2st_planet()
{
char tf_char, pl_char;
int tf_num, planet_num;
tplanet *pplanet;
int factors,starnum;
boolean see, done;
char iline[81];
int ind,amount;
char dum;
printf("last");
cle3r_left();
point(1,19);
printf("Firing TF:");
get_char(&tf_char);
tf_num = tf_char-'A'+1;
if ( (tf_num < 1) || (tf_num > 26) ) {
error_message();
printf(" !Illegal tf");
}
else if ( tf[player][tf_num].dest==0 ) {
error_message();
printf(" !Nonexistent tf");
}
else if ( tf[player][tf_num].eta!=0 ) {
error_message();
printf(" !Tf is not in normal space ");
}
else if ( tf[player][tf_num].blasting ) {
error_message();
printf(" !Tf is already blasting ");
}
else if ( (tf[player][tf_num].b == 0) && (tf[player][tf_num].c == 0) ) {
error_message();
printf(" !Tf has no warships ");
}
else {
starnum = tf[player][tf_num].dest;
pplanet = stars[starnum].first_planet;
if ( pplanet==nil ) {
error_message();
printf(" !No planets at star %c ",
starnum + 'A' - 1);
}
else {
point(1,20);
printf("Target colony ");
if ( pplanet->next== nil ) {
printf("%2d",pplanet->number);
}
else {
printf(":");
get_char(&pl_char);
planet_num = pl_char -'0';
done = false;
while ( ! done ) {
if ( (pplanet->number==planet_num) )
done = true;
else {
if ( pplanet->next==nil )
done = true;
else
pplanet = pplanet->next;
};
};
if ( pplanet->number != planet_num ) {
error_message();
printf(" !No such planet at this star ");
pplanet = nil;
};
};
if ( pplanet != nil ) {
if ( pplanet->team==ENEMY ) {
error_message();
printf(" !Conquer it first!");
}
else if ( (pplanet->team==player)
&& (! pplanet->conquered)
) {
error_message();
printf(" !That is a human colony!! ");
}
else {
factors = weapons[player]
* ((tf[player][tf_num].c * c_guns) +
(tf[player][tf_num].b * b_guns));
point(1,21);
printf("Units (max %3d) :", factors/4);
point(18,21);
get_line(iline,&ind,false);
get_token(iline,&ind,&amount,&dum);
if ( amount < 0 )
factors = 0;
else if ( amount > 0 )
factors = min (factors, amount * 4);
tf[player][tf_num].blasting = true;
point(1,22);
printf("Blasting %3d units", factors/4);
blast(pplanet,factors);
point(1,23);
left_line[23] = true;
putchar(pplanet->pstar+'A'-1);
pplanet->psee_capacity = pplanet->capacity;
see = true;
if ( ((y_cursor > 21) && (x_cursor >= 50)) ||
(y_cursor > 24) ) {
pause();
clear_field();
point(50,1);
};
printf("%d:%2d ", pplanet->number, pplanet->psee_capacity);
point(x_cursor + 5, y_cursor);
x_cursor = x_cursor - 5;
if ( pplanet->psee_capacity==0 )
printf(" Decimated");
else if ( (pplanet->team==none) && see )
printf(" No colony");
else if ( pplanet->team==player ) {
printf("(%2d,/%3d)", pplanet->inhabitants, pplanet->iu);
if ( pplanet->conquered )
printf("Con");
else
printf(" ");
if ( pplanet->mb!=0 )
printf("%2dmb", pplanet->mb);
else
printf(" ");
if ( pplanet->amb!=0 )
printf("%2damb", pplanet->amb);
}
else if ( (pplanet->team==ENEMY) && see ) {
printf("*EN*");
if ( see && pplanet->conquered ) {
printf("Conquered");
}
else
printf(" ");
if ( pplanet->under_attack ) {
if ( pplanet->mb != 0 )
printf("%2dmb", pplanet->mb);
else
printf(" ");
if ( pplanet->amb != 0 )
printf("%2damb", pplanet->amb);
};
};
point(x_cursor,y_cursor + 1);
};
};
};
};
}
inputplayer()
{
char key;
boolean fin;
point(33,20);
printf("* Movement * ");
fin=false;
do {
point(1,18);
printf("? ");
point(2,18);
get_char(&key);
switch ( key ) {
case 'M':
printmap();
break;
case 'B':
bl2st_planet();
break;
case 'G':
case ' ':
fin=true;
break;
case 'H':
help(1);
break;
case 'L':
land();
break;
case 'D':
send_tf();
break;
case 'S':
starsum();
break;
case 'N':
make_tf();
break;
case 'J':
join_tf();
break;
case 'C':
print_col();
break;
case 'R':
ressum();
break;
case 'Q':
fin = true;
quit();
break;
case '?':
break;
case 'T':
tfsum();
break;
default:
error_message();
printf(" !illegal command");
}; /*switch (*/
}
while (!fin);
}
land()
{
char tfc,trc,planc;
boolean see;
int x,y,room_left,tfnum,transports,planet_num;
int starnum,ind;
char iline[81];
boolean found;
struct stplanet *pplanet;
printf("and tf:");
get_char(&tfc);
cle3r_left();
tfnum = tfc-'A'+1;
if ( (tfnum<1) || (tfnum>26) ) {
error_message();
printf(" !illegal tf");
}
else if ( (tf[player][tfnum].dest==0)) {
error_message();
printf(" !nonexistent tf");
}
else if ( (tf[player][tfnum].eta!=0) ) {
error_message();
printf(" !tf is not in normal space ");
}
else {
starnum= tf[player][tfnum].dest;
pplanet= stars[starnum].first_planet;
if ( pplanet==nil ) {
error_message();
printf(" !no planets at this star ");
}
else if ( tf_stars[starnum][ENEMY]>0 ) {
error_message();
printf(" !enemy ships present");
}
else {
point(11,18);
printf(" planet ");
if ( pplanet->next==nil ) {
planet_num = pplanet->number;
printf("%d", planet_num);
}
else {
printf(":");
get_char(&planc);
planet_num = planc-'0';
found=false;
while ( (pplanet!= nil) && ! found){
if ( pplanet->number == planet_num )
found=true;
else pplanet = pplanet->next;
};
if ( ! found ) {
planet_num = 0;
error_message();
printf(" !Not a habitable planet ");
}
};
if ( planet_num != 0 ) {
if ( (pplanet->team == ENEMY) || ((pplanet->team == player)
&& (pplanet->conquered)) ) {
error_message();
printf(" !Enemy infested planet !! ");
}
else { /*get the number of transports*/
room_left = pplanet->capacity - pplanet->inhabitants;
point(1,19);
printf(" transports:");
get_line(iline,&ind,false);
get_token(iline,&ind,&transports,&trc);
if ( transports==0 ) transports = tf[player][tfnum].t;
if ( transports < 1 ) {
error_message();
printf(" !illegal transports");
}
else if ( transports > tf[player][tfnum].t ) {
error_message();
printf(" !only %2d transports in tf", tf[player][tfnum].t);
}
else if ( transports > room_left ) {
error_message();
printf(" !only room for %2d transports", room_left);
}
else {
pplanet->team = player;
if ( pplanet->inhabitants==0 ) {
col_stars[starnum][player]++;
};
pplanet->inhabitants=pplanet->inhabitants+transports;
pplanet->iu=pplanet->iu + transports;
tf[player][tfnum].t=tf[player][tfnum].t-transports;
x=tf[player][tfnum].x;
y=tf[player][tfnum].y;
if ( board[x][y].enemy == ' ' ) {
board[x][y].enemy = '@';
update_board(x,y,left);
};
point(1,20);
putchar(starnum+'A'-1);
see = true;
if ( ((y_cursor > 21) && (x_cursor >= 50)) ||
(y_cursor > 24) ) {
pause();
clear_field();
point(50,1);
};
printf("%d:%2d ", pplanet->number, pplanet->psee_capacity);
point(x_cursor + 5, y_cursor);
x_cursor = x_cursor - 5;
if ( pplanet->psee_capacity==0 )
printf(" Decimated");
else if ( (pplanet->team==none) && see )
printf(" No colony");
else if ( pplanet->team==player ) {
printf("(%2d,/%3d)", pplanet->inhabitants, pplanet->iu);
if ( pplanet->conquered )
printf("Con");
else
printf(" ");
if ( pplanet->mb!=0 )
printf("%2dmb", pplanet->mb);
else
printf(" ");
if ( pplanet->amb!=0 )
printf("%2damb", pplanet->amb);
}
else if ( (pplanet->team==ENEMY) && see ) {
printf("*EN*");
if ( see && pplanet->conquered ) {
printf("Conquered");
}
else
printf(" ");
if ( pplanet->under_attack ) {
if ( pplanet->mb != 0 )
printf("%2dmb", pplanet->mb);
else
printf(" ");
if ( pplanet->amb != 0 )
printf("%2damb", pplanet->amb);
};
};
point(x_cursor,y_cursor + 1);
zero_tf(player,tfnum);
pr3nt_tf(tfnum);
};
};
};
};
};
}
quit()
{
char answer;
cle2r_screen();
printf("Quit game....[verify]\n");
get_char(&answer);
if ( answer != 'Y' )
printmap();
else {
game_over = true;
};
}
send_tf()
{
char tf_move;
int tf_num;
boolean error;
printf("estination tf:");
get_char(&tf_move);
cle3r_left();
point(1,19);
tf_num = tf_move-'A'+1;
if ( (tf_num<1) || (tf_num>26) ) {
error_message();
printf(" !illegal tf");
}
else if ( tf[player][tf_num].dest==0 ) {
error_message();
printf(" !nonexistent tf");
}
else if ( (tf[player][tf_num].eta != 0) &&
( (tf[player][tf_num].eta != tf[player][tf_num].origeta) ||
(tf[player][tf_num].withdrew) )
) {
error_message();
printf(" !Tf is not in normal space ");
}
else if ( tf[player][tf_num].blasting ) {
error_message();
printf(" !Tf is blasting a planet");
}
else {
tf[player][tf_num].withdrew = false;
set_des(tf_num,&error);
};
}